#ifndef __BITREEN_H__
#define __BITREE_H__

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define null NULL
#define true 0
#define false !true
#define bool int

/* 定义二叉树的节点类型 */
typedef int TElemType;

/* 二叉链表表示法的结构模型 */
typedef struct BiTNode
{
    TElemType data;         /* 节点数据 */
    struct BiTNode *lchild; /* 左孩子 */
    struct BiTNode *rchild; /* 右孩子 */
} BiTNode, *BiTree;

/* 三叉链表表示法的结构模型 */
typedef struct TriTNode
{
    TElemType data;          /* 节点数据 */
    struct TriTNode *lchild; /* 左孩子 */
    struct TriTNode *rchild; /* 右孩子 */
    struct TriTNode *parent; /* 双亲节点 */
} TriTNode, *TriTree;

/* 双亲表示法的结构模型 */
#define TREE_SIZE_MAX 20 /* 树的最大容量 */

typedef struct BPTNode
{
    TElemType data;    /* 节点数据 */
    int parentPostion; /* 指向双亲的指针 -- 数组的下标 */
    char LRFlag;       /* 左孩子-右孩子 的标志 */
} BPTNode;

typedef struct BPTree
{
    BPTNode nodes[TREE_SIZE_MAX]; /* 保存节点 */
    int nodeCnt;                  /* 节点的数量 */
    int root;                     /* 根节点的位置，保存双亲结点的数组下标 */
} BPTree;

/* 接口申明 */
typedef struct func_BiTree
{
    void (*BiTree_Create_v)(void);
    void (*BiTree_Create_p)(void);
    void (*TriTree_Create)(void);
    void (*BPTree_Create)(void);
} func_BiTree;

#endif
